package com.ppch.wuwamanus.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.boot.jackson.JsonComponent;
import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

/**
 * Spring MVC Json 配置：添加解决 Long 转 json 精度丢失的配置
 */
@JsonComponent
public class JsonConfig {

    /**
     * TODO: 后端 Long 类型的数据（比如用户id）响应给前端时，由于前端JS的精度范围有限，后端返回的数据范围过大，
     *      导致前端精度丢失，会影响前端获取到的数据结果。
     *      通过 在浏览器按下 F12 键，网络请求 预览 中可以看到 id 的后几位不正确（响应哪里看是正确的）
     * TODO: 解决方式就是 将Long类型数据转换为String类型的数据
     */
    @Bean
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        SimpleModule module = new SimpleModule();
        //将Long类型数据转换为String类型的数据
        module.addSerializer(Long.class, ToStringSerializer.instance);
        module.addSerializer(Long.TYPE, ToStringSerializer.instance);
        objectMapper.registerModule(module);
        return objectMapper;
    }
}
